package com.yh.correct.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.yh.common.utils.ExcelUtil;
import com.yh.correct.dao.IGroupJudicialMapper;
import com.yh.correct.dao.IPersonnelMapper;
import com.yh.correct.model.GroupJudicial;
import com.yh.correct.model.Page;
import com.yh.correct.model.Personnel;
import com.yh.correct.service.IPersonnelService;
/**
 * 工作人员 业务层 实现类
 * @author Administrator
 */
@Service
public class PersonnelServiceImpl implements IPersonnelService {

	private static Logger logger = LogManager.getLogger(PersonnelServiceImpl.class);
	
	@Autowired
	private IPersonnelMapper personnelMapper;
	
	@Autowired
	private IGroupJudicialMapper groupJudicialMapper;
	
	/**
	 * 新增工作人员
	 */
	@Override
	public int addPersonnel(Personnel pson) {
		logger.debug("新增工作人员"+pson);
		return personnelMapper.addPersonnel(pson);
	}
	/**
	 * 根据id删除工作人员
	 */
	@Override
	public int delPersonnel(Personnel pson) {
		logger.debug("根据id删除工作人员"+pson);
		return personnelMapper.delPersonnel(pson);
	}
	/**
	 * 根据id修改工作人员
	 */
	@Override
	public int updatePersonnel(Personnel pson) {
		logger.debug("根据id修改工作人员"+pson);
		return personnelMapper.updatePersonnel(pson);
	}
	/**
	 * 根据id查询工作人员
	 */
	@Override
	public Map<String,Object>  getPersonnel(Personnel pson) {
		logger.debug(" 根据id查询工作人员"+pson);
		return personnelMapper.getPersonnel(pson);
	}
	/**
	 * 模糊查询匹配的工作人员
	 */
	@Override
	public Page queryLikePersonnels(Map<String, Object> cond) {
		logger.debug("模糊查询匹配的工作人员"+cond);
		Page page=new Page();
		if(cond.get("pageSize")==null){
			List<Object> list=personnelMapper.getLikePersonnels(cond);
			page.setResult(list);
		}else{
			//根据条件查询符合的用户列表记录总数，赋值给page的totalNum变量
			page.setTotalNum(personnelMapper.getLikePersonnelsCount(cond));
			//从请求参数中获取每页大小
			int pageSize = Integer.parseInt(String.valueOf(cond.get("pageSize")));
			page.setPageSize(pageSize);
			//从请求参数中获取当前页码
			int curPageNum = Integer.parseInt(String.valueOf(cond.get("pageNum")));
			page.setCurPageNum(curPageNum);
			//动态计算总页数(总记录数 除以 每页大小，加上  总页数 求余 每页大小，如果余数不为0，则 加 1，否则 加 0 )
			page.setTotalPage(page.getTotalNum()/pageSize+(page.getTotalNum()%pageSize==0?0:1));
			//根据条件查询符合的用户列表记录，赋值给page的result变量
			page.setResult(personnelMapper.getLikePersonnels(cond));
		}
		return page;
	}
	/**
	 * 根据id 查询工作人员及司法所名称
	 */
	@Override
	public Map<String, Object> getPersonnel2(Personnel pson) {
		logger.debug(" 根据id查询工作人员"+pson);
		return personnelMapper.getPersonnel2(pson);
	}
	
	/**
	 * 导出匹配的工作人员
	 */
	@Override
	public Workbook exportPersonnels(Map<String, Object> cond) {
		logger.debug("导出匹配的工作人员"+cond);
		List<Object> list=personnelMapper.getLikePersonnels(cond);
		List<Map<String, Object>> list2=new ArrayList<Map<String, Object>>();
		Map<String,Object> sheetMap=new HashMap<String,Object>();
		sheetMap.put("sheetName","工作人员");
		list2.add(sheetMap);
		for(Object obj:list){
			Map<String,Object> map=(Map<String,Object>)obj;
			list2.add(map);
		}
		String[] columnNames={"所属单位","姓名","性别","出生日期","证件号码","职业","状态"}; 
		String[] keys={"jdName","pName","sex","birthday","card","profession","status"}; 
		Workbook wb=ExcelUtil.createWorkBook(list2, keys, columnNames);
		return wb;
	}
	
	/**
	 * 根据工作人员id和矫正人员名字查询其所在矫正单位的所有匹配的矫正人员
	 */
	@Override
	public List<Object> getCP(Map<String, Object> cond) {
		logger.debug("根据工作人员id和矫正人员名字查询其所在矫正单位的所有匹配的矫正人员"+cond);
		return personnelMapper.getCP(cond);
	}
	
	/**
	 * 查询工作人员所监督的对象或根据cid得到矫正对象
	 */
	@Override
	public List<Object> getPcp(Map<String,Object> map) {
		logger.debug("查询工作人员所监督的对象"+map);
		return personnelMapper.getPcp(map);
	}
	/**
	 * 更新帮教小组（矫正对象与监督人员）
	 */
	@Override
	@Transactional
	public void updateGroupOfPson(String pid, List<GroupJudicial> list) {
		logger.debug(" 更新帮教小组（矫正对象与监督人员）"+pid+list);
		//删除帮教小组（矫正人与监督人）中旧信息
		groupJudicialMapper.delGroupJudicialOfPerson(Integer.parseInt(pid));
		if(list.size()!=0){
			//帮教小组（矫正人与监督人）增加新信息
			groupJudicialMapper.addGroupJudicial(list);
		}
	}
}
